**************************************************************************************
	;Header frs File-linken

	IFD	Flag_project
Flag_SkyPara	set 1
	ENDC
	IFND	Flag_SkyPara
Flag_SkyPara	set 0
	ENDC
	IFEQ	Flag_SkyPara
Flag_SkyPara	set 1
	include	Nutz_project
	ELSEIF
**************************************************************************************
CLOUD_PER_SPRITE	EQU	6
CLOUD_UPPER_CLIP	EQU	26
CLOUD_LOWER_CLIP	EQU	310

		rsreset
Sprite_X_Position	rs.w	1
Sprite_Y_Position	rs.w	1
Sprite_Speed_Ist	rs.w	1
Sprite_Speed_Soll	rs.w	1
Sprite_Float		rs.w	1
Sprite_Offset		rs.w	1
Sprite_Timer		rs.w	1
Sprite_Reset		rs.w	1
SPRITE_ENTRY_LENGTH	rs.w	0

			rsreset
Lax_Gfx_Anf		rs.w	1	;Anf Adr der GFX
Lax_Copper_Entry1	rs.w	1	;Adresse des CopperAbschnittes1
Lax_Y_WaitPos		rs.w	1	;Y_Position fr Wait
Lax_Pos_Val		rs.w	1	;Bere Pos  ScreenPos*Val/16
Lax_Max_Hight		rs.w	1	;Aktuelle Hhe des Lax
Lax_Own_Speed		rs.w	1
			rs.w	1	;Das war der Own_Add
LAX_ENTRYLENGTH		rs.w	0
LAX_END			=	-1

			rsreset
Lax_Akt_Gfx		rs.w	1	;Gfx Adr die initialisiert wird
Lax_Softpos		rs.w	1	;SoftPosition dieser Ebene
Lax_Act_Y		rs.w	1
Lax_Own_Add		rs.w	1

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

;--------------------------------------------------------------------------

		rsset	Task_Buffer
Sky_CopperList1		rs.b	17*6
Sky_CopperList2		rs.b	17*6
Copper_Buffer		rs.l	1
Copper_Help		rs.b	10
Copper_TabPointer	rs.l	1
YPos_Pointer		rs.l	1
YPos_Buffer		rs.l	1
YPos_Table1		rs.w	16*6
YPos_Table2		rs.w	16*6
Cloud_Liste_1		rs.b	SPRITE_ENTRY_LENGTH*CLOUD_PER_SPRITE+2
Cloud_Zeiger_Liste	rs.l	3
Lax_Variables		rs.b	16*LAX_ENTRYLENGTH
Sky_Fade_Struktur	rs.b	FADE_SIZEOF+84*6


MakeSkyPara:
;		move.w	#$0e0,d0
;		bsr	SetColor

		bsr	Show_ParaWolken
	tst.b	Dont_render_Parallax(a6)
	bne	.only_colors

		*--*>Get Bases
		*--*>Calculate Global Verschiebung

		moveq	#0,d5
		move	Scr_Y_Max(a6),d5
		move	MaxGlobal_ScrollVal,d6
		divu	d6,d5		;jede d5 Front Pix
					;wird 1 back Pix gescrollt
		moveq	#0,d6
		move	Scr_Y_Level_Pos(a6),d6
		divu	d5,d6		;GLOBAL ScrollVal in d6

		lea	Lax_Entry_Tab(pc),a0
		lea	Lax_Variables(a6),a5
		lea	MaxLAX_ScrollVals,a1
		move	AnzParaLax,d7
		moveq	#0,d3
.Bere_Y_AnfPos_loop	*---*>Y_Anf_Pos_Berechnen
		*--Calc LAX Verschiebung
		move	Lax_Y_WaitPos(a0),d0
		move	d3,d1
		add	d1,d1
		move	(a1,d1),d2
		beq.s	.NoZERO
		moveq	#0,d1
		move	Scr_Y_Max(a6),d1
		sub	#9*16,d1
		;add	#208,d1		;***!!!
		divu	d2,d1		;jede d1 Front Pix wird 1 LAX Pix gescrollt

		moveq	#0,d2
		move	Scr_Y_Level_Pos(a6),d2
		divu	d1,d2		;LAX ScrollVal in d2

.NoZERO		*--*>Global Scroll und Lax Scroll abziehen abziehen
		sub	d6,d0
		sub	d2,d0
		move	d0,Lax_Act_Y(a5)
		add	#LAX_ENTRYLENGTH,a0
		add	#LAX_ENTRYLENGTH,a5
		addq	#1,d3
		dbf	d7,.Bere_Y_AnfPos_loop

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		*--*>Search first Entry and Bere GFX Offset
		lea	Lax_Entry_Tab,a0
		lea	Lax_Variables(a6),a5

		move	AnzParaLax,d7
.Search_Anfang	*---*>Y_Anf_Pos_Suchen
		move	Lax_Act_Y(a5),d0
		bmi.s	.Next_Entry
		cmp	#$2f,d0
		blo.s	.Next_Entry
		bra.s	.Entry_Found
.Next_Entry	*--*>Test Next Entry
		add	#LAX_ENTRYLENGTH,a0
		add	#LAX_ENTRYLENGTH,a5
		dbf	d7,.Search_Anfang
*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.Entry_Found	*--*>Testen ob dieser oder vorheriger ?
		cmp	#$2f,d0
		beq.s	.THISONE
		*---*>Get Previous ENTRY
		sub	#LAX_ENTRYLENGTH,a0
		sub	#LAX_ENTRYLENGTH,a5
		addq	#1,d7
		*--Bere Akt GFX Anf
		move	Lax_Act_Y(a5),d0
		sub	#$2f,d0
		neg	d0
		add.w	Lax_Gfx_Anf(a0),d0
		move.w	d0,Lax_Akt_Gfx(a5)
		move	#$2f,Lax_Act_Y(a5)
		bra.s	.Continue
.THISONE		*--*>Ist gerade oben
		move.w	Lax_Gfx_Anf(a0),Lax_Akt_Gfx(a5)
		moveq	#0,d0

.Continue		*--*>diesen Split in SLOT TAB eintragen

		move.l	Copper_Buffer(a6),a2
		addq.l	#4,a2
		move.l	YPos_Buffer(a6),a1

*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
.Init_Loop	*---*>INIT WaitPos and Softpos and GFX Adr

		*--Softscroll machen
		moveq	#0,d1
		move	Lax_Own_Speed(a0),d1
		add	d1,Lax_Own_Add(a5)
		move	Lax_Own_Add(a5),d1
		divu	#320,d1
		swap	d1
		move	d1,Lax_Own_Add(a5)
		lsr	#2,d1

		move	Scr_X_Level_Pos(a6),d0
		mulu	Lax_Pos_Val(a0),d0		;Pos*Val/16
		lsr	#4,d0
		add	d1,d0
		move	d0,d1
		addq.w	#1,d1
		neg.w	d1
		and.l	#$ffff,d1
		divu	#80,d1
		swap	d1
		sub.w	#80,d1
		move	d1,Lax_Softpos(a5)

		*--Testen ob Offset auf GFX berechnet werden mu
		cmp.l	#LAX_W9,a0
		blo.s	.NO_OFFSET_BERE
		*--*>Bere Offset auf GFX
		move	Lax_Act_Y+LAX_ENTRYLENGTH(a5),d0
		sub	Lax_Act_Y(a5),d0
		move	Lax_Max_Hight(a0),d1
		sub	d0,d1
;		mulu	#3*LAX_PLANE_SIZE,d1
		add.w	d1,Lax_Akt_Gfx(a5)
.NO_OFFSET_BERE	*--WaitPos in Copper und COPPER SLOT schreiben
		move	Lax_Act_Y(a5),d0
		sub.w	#$2f,d0
		beq.s	.no_copper_entry
		move.w	d0,(a2)
		addq.l	#6,a2				;Zum nchsten Copper-Eintrag
.no_copper_entry:
		*--Adr in Copper schreiben
		move.w	Lax_Akt_Gfx(a5),d1
		sub.w	d0,d1

		move.w	d1,(a1)+
		move.w	Lax_Softpos(a5),(a1)+
		move.w	Lax_Copper_Entry1(a0),(a1)+

		add	#LAX_ENTRYLENGTH,a0
		add	#LAX_ENTRYLENGTH,a5
		*--*>testen ob Diese Letzter Eintrag ist ?
		cmp	#$2f+222,Lax_Act_Y(a5)
		bhi.s	.LAST_ENTRY
		move.w	Lax_Gfx_Anf(a0),Lax_Akt_Gfx(a5)
		dbf	d7,.Init_Loop

		*--*>Last Entry
.LAST_ENTRY
		move.w	#$ff,(a2)+			;Copper-List abschlieen
;		move.l	#Int_Nop,(a2)
		clr.l	(a1)+
		clr.l	(a1)+

	move.l	Copper_Buffer(a6),a0
	move.l	Copper_List(a6),Copper_Buffer(a6)	;Beim nchsten VBlank bitte die neue
	move.l	a0,Copper_List(a6)			;Copperlist nehmen

	move.l	YPos_Buffer(a6),a0
	move.l	YPos_Pointer(a6),YPos_Buffer(a6)
	move.l	a0,YPos_Pointer(a6)

.only_colors:
FadeParaColors:
	lea	Sky_Fade_Struktur(a6),a0
	bsr	Call_Transformation2

	rts

Copper_SkySplit:
	move.l	#$40000010+$00020000,$c00004		;Vertikaler Split
	move.w	Copper_Help(a6),$c00000
	move.l	#$40000000+$30020003,$c00004		;Horizontaler Split
	move.w	Copper_Help+2(a6),$c00000

	move.w	#$2700,sr

	movem.l	a0/d0-d1,-(sp)

	;SetColor
	move.w	Copper_Help+4(a6),d0

	lea	SkyPCol1,a0
	lea	(a0,d0.w),a0

.waithbl:
	cmp.b	#255/2,$c00009
	blo.s	.waithbl

	move.l	(a0)+,d0
	move.w	(a0)+,d1
	move.l	a0,-(sp)
	lea	$c00000,a0
	move.l	#$c0700000,4(a0)
	move.l	d0,(a0)
	move.w	d1,(a0)

.waithbloff:
	btst	#2,$c00005
	bne.s	.waithbloff

	move.l	Copper_Pointer(a6),a0
	move.w	(a0)+,d0			;In Dieser Zeile wird der Nchste Ausgelst!
	move.l	(a0)+,Int_HBlank+2(a6)
	move.l	a0,Copper_Pointer(a6)
	move.w	(a0),d1
	sub.w	d0,d1
	subq.w	#1,d1
	and.w	#$ff,d1
	or.w	#$8a00,d1
	move.w	d1,$c00004

	move.l	Copper_TabPointer(a6),a0
	move.l	(a0)+,Copper_Help(a6)
	move.w	(a0)+,Copper_Help+4(a6)
	move.l	a0,Copper_TabPointer(a6)

	move.l	(sp)+,a0

.waithbl2:
	cmp.b	#255/2,$c00009
	blo.s	.waithbl2

	nop

	move.l	(a0)+,d0
	move.w	(a0)+,d1
	lea	$c00000,a0
	move.l	#$c0760000,4(a0)
	move.l	d0,(a0)
	move.w	d1,(a0)

	movem.l	(sp)+,a0/d0-d1
	rte

Copper_InitSky:
	move.l	a0,-(sp)

	move.l	YPos_Pointer(a6),a0
	move.l	#$40000010+$00020000,$c00004
	move.w	(a0)+,$c00000
	move.l	#$40000000+$30020003,$c00004
	move.w	(a0)+,$c00000
	move.w	(a0)+,d0			;Color-List
	move.l	(a0)+,Copper_Help(a6)
	move.w	(a0)+,Copper_Help+4(a6)
	move.l	a0,Copper_TabPointer(a6)

	lea	SkyPCol1,a0
	lea	(a0,d0.w),a0

	move.l	#$c0700000,$c00004

	move.l	(a0)+,$c00000
	move.l	(a0)+,$c00000
	move.l	(a0)+,$c00000

	move.l	(sp)+,a0
	rts


;--------------------------------------------------------------------------
;MaxLAX_ScrollVals	dc.w	0,16,32, 48,80,114, 150,150, 114,80,48, 32,16,0

MaxLAX_ScrollVals	dc.w	0,16,32, 48,80,114, 150,150, 144,105,58, 47,26,5
MaxGlobal_ScrollVal	dc.w	18+20+22+40+44+48+51+51+12+10+08+06+04+02-224-64

LAX_SKY_SMALL		EQU	2
LAX_SKY_BIG		EQU	24
LAX_SKY_BIGFLIP		EQU	77
LAX_SKY_SMALLFLIP	EQU	128

AnzParaLax	dc.w	14-1
Lax_Entry_Tab
LAX_W1		;---------------- LAX 01
		dc.w	LAX_SKY_SMALL	;Lax_Gfx_Anf
		dc.w	SkyPCol1-SkyPCol1	;Lax_Colortable
		dc.w	$2f+000		;Lax_Y_WaitPos
		dc.w	01		;Lax_Pos_Val/16
		dc.w	22		;Lax_Max_Hight
		dc.w	0
		dc.w	0
LAX_W2		;---------------- LAX 02
		dc.w	LAX_SKY_SMALL	;Lax_Gfx_Anf
		dc.w	SkyPCol2-SkyPCol1	;Lax_Colortable
		dc.w	$2f+018		;Lax_Y_WaitPos
		dc.w	02		;Lax_Pos_Val/16
		dc.w	22		;Lax_Max_Hight
		dc.w	1
		dc.w	0
LAX_W3		;---------------- LAX 03
		dc.w	LAX_SKY_SMALL	;Lax_Gfx_Anf
		dc.w	SkyPCol3-SkyPCol1	;Lax_Colortable
		dc.w	$2f+038		;Lax_Y_WaitPos
		dc.w	04		;Lax_Pos_Val/16
		dc.w	22		;Lax_Max_Hight
		dc.w	2
		dc.w	0
LAX_W4		;---------------- LAX 04
		dc.w	LAX_SKY_BIG	;Lax_Gfx_Anf
		dc.w	SkyPCol4-SkyPCol1	;Lax_Colortable
		dc.w	$2f+060		;Lax_Y_WaitPos
		dc.w	06		;Lax_Pos_Val/16
		dc.w	51		;Lax_Max_Hight
		dc.w	3
		dc.w	0
LAX_W5		;---------------- LAX 05
		dc.w	LAX_SKY_BIG	;Lax_Gfx_Anf
		dc.w	SkyPCol5-SkyPCol1	;Lax_Colortable
		dc.w	$2f+100		;Lax_Y_WaitPos
		dc.w	08		;Lax_Pos_Val/16
		dc.w	51		;Lax_Max_Hight
		dc.w	4
		dc.w	0
LAX_W6		;---------------- LAX 06
		dc.w	LAX_SKY_BIG	;Lax_Gfx_Anf
		dc.w	SkyPCol6-SkyPCol1	;Lax_Colortable
		dc.w	$2f+144		;Lax_Y_WaitPos
		dc.w	10		;Lax_Pos_Val/16
		dc.w	51		;Lax_Max_Hight
		dc.w	5
		dc.w	0
LAX_W7		;---------------- LAX 07
		dc.w	LAX_SKY_BIG	;Lax_Gfx_Anf
		dc.w	SkyPCol7-SkyPCol1	;Lax_Colortable
		dc.w	$2f+192		;Lax_Y_WaitPos
		dc.w	12		;Lax_Pos_Val/16
		dc.w	51		;Lax_Max_Hight
		dc.w	6
		dc.w	0
LAX_W8		;---------------- LAX 08
		dc.w	LAX_SKY_BIGFLIP	;Lax_Gfx_Anf
		dc.w	SkyPCol8-SkyPCol1	;Lax_Colortable
		dc.w	$2f+243		;Lax_Y_WaitPos
		dc.w	12		;Lax_Pos_Val/16
		dc.w	51		;Lax_Max_Hight
		dc.w	6
		dc.w	0
LAX_W9		;---------------- LAX 09
		dc.w	LAX_SKY_BIGFLIP	;Lax_Gfx_Anf
		dc.w	SkyPCol9-SkyPCol1	;Lax_Colortable
		dc.w	$2f+294		;Lax_Y_WaitPos
		dc.w	10		;Lax_Pos_Val/16
		dc.w	51		;Lax_Max_Hight
		dc.w	5
		dc.w	0
LAX_W10		;---------------- LAX 10
		dc.w	LAX_SKY_BIGFLIP	;Lax_Gfx_Anf
		dc.w	SkyPCol10-SkyPCol1	;Lax_Colortable
		dc.w	$2f+306		;Lax_Y_WaitPos
		dc.w	08		;Lax_Pos_Val/16
		dc.w	51		;Lax_Max_Hight
		dc.w	4
		dc.w	0
LAX_W11		;---------------- LAX 11
		dc.w	LAX_SKY_BIGFLIP	;Lax_Gfx_Anf
		dc.w	SkyPCol11-SkyPCol1	;Lax_Colortable
		dc.w	$2f+316		;Lax_Y_WaitPos
		dc.w	06		;Lax_Pos_Val/16
		dc.w	51		;Lax_Max_Hight
		dc.w	3
		dc.w	0
LAX_W12		;---------------- LAX 12
		dc.w	LAX_SKY_SMALLFLIP	;Lax_Gfx_Anf
		dc.w	SkyPCol12-SkyPCol1	;Lax_Colortable
		dc.w	$2f+324		;Lax_Y_WaitPos
		dc.w	04		;Lax_Pos_Val/16
		dc.w	22		;Lax_Max_Hight
		dc.w	2
		dc.w	0
LAX_W13		;---------------- LAX 13
		dc.w	LAX_SKY_SMALLFLIP	;Lax_Gfx_Anf
		dc.w	SkyPCol13-SkyPCol1	;Lax_Colortable
		dc.w	$2f+330		;Lax_Y_WaitPos
		dc.w	02		;Lax_Pos_Val/16
		dc.w	22		;Lax_Max_Hight
		dc.w	1
		dc.w	0
LAX_W14		;---------------- LAX 14
		dc.w	LAX_SKY_SMALLFLIP	;Lax_Gfx_Anf
		dc.w	SkyPCol14-SkyPCol1	;Lax_Colortable
		dc.w	$2f+334		;Lax_Y_WaitPos
		dc.w	01		;Lax_Pos_Val/16
		dc.w	22		;Lax_Max_Hight
		dc.w	0
		dc.w	0

LAX_FAKE	;---------------- LAX FAKE
		dc.w	LAX_SKY_SMALLFLIP	;Lax_Gfx_Anf
		dc.w	SkyPCol14-SkyPCol1	;Lax_Colortable
		dc.w	$2f+208		;Lax_Y_WaitPos
		dc.w	8		;Lax_Pos_Val/16
		dc.w	22		;Lax_Max_Hight
		dc.w	0
		dc.w	0

SkyParaCols:
	dc.w	$fff,$aff,$dff,$cff,$bff,$fff
	dc.w	$aff,$0df,$9ff,$6ef,$3ef,$fff
	dc.w	$0df,$0bf,$6ff,$4df,$2df,$fff
	dc.w	$0bf,$0af,$3ff,$2df,$1cf,$0ef
	dc.w	$0af,$09f,$0ff,$0df,$0bf,$fff
	dc.w	$09f,$25b,$1af,$18d,$16c,$8ef
	dc.w	$25b,$407,$36f,$22c,$209,$0ef
	dc.w	$b16,$407,$d7c,$b4a,$829,$f0f
	dc.w	$a05,$b16,$e6b,$e4a,$d28,$f4d
	dc.w	$904,$a05,$e5a,$d29,$c17,$f3c
	dc.w	$803,$904,$d49,$c18,$b17,$f2b
	dc.w	$702,$803,$c38,$b07,$a06,$e1a
	dc.w	$601,$702,$b27,$a06,$905,$d09
	dc.w	$500,$601,$a16,$905,$804,$c08

		rsset	Sky_Fade_Struktur+Fade_Palette+WorkRam
SkyPCol1:	rs.w	6
SkyPCol2:	rs.w	6
SkyPCol3:	rs.w	6
SkyPCol4:	rs.w	6
SkyPCol5:	rs.w	6
SkyPCol6:	rs.w	6
SkyPCol7:	rs.w	6
SkyPCol8:	rs.w	6
SkyPCol9:	rs.w	6
SkyPCol10:	rs.w	6
SkyPCol11:	rs.w	6
SkyPCol12:	rs.w	6
SkyPCol13:	rs.w	6
SkyPCol14:	rs.w	6

*-------------------------------------------------------------------------------------
**************************************************************************************
*-------------------------------------------------------------------------------------
*---------------	SPR-CLOUDS   SPR-CLOUDS   SPR-CLOUDS   SPR-CLOUDS   SPR-CLOUDS   
*-------------------------------------------------------------------------------------
*----------------------------------------------------------------------------
*	MR NUTZ - Sprite-Wolken fr die Wolkenstage
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
PARAOFFS		=0
*----------------------------------------------------------------------------
Show_ParaWolken:
		lea	Cloud_Zeiger_Liste(a6),a0

	tst.b	Dont_render_Parallax(a6)
	bne	.Clip_Ok

		;Hole Parameter fr nchste Bubble
		moveq	#CLOUD_PER_SPRITE-1,d6
		move.l	Cloud_Pointer(a0),a1

		;Hole Position der nchsten Bubble
.Loop:
		move	Sprite_X_Position(a1),d0
		bpl.s	.Ok
		move.l	Cloud_Reset(a0),a1
		bra.s	.Loop

		;Soll- und Ist-Speed annhern
.Ok:
		move	Sprite_Speed_Soll(a1),d3
		cmp	Sprite_Speed_Ist(a1),d3
		beq.s	.Speed_Ist_Soll_Ok
		bhi.s	.Beschleunigen
		subq.w	#1,Sprite_Speed_Ist(a1)
		bra.s	.Speed_Ist_Soll_Ok
.Beschleunigen:
		addq.w	#1,Sprite_Speed_Ist(a1)

		;Clouds werden nach links geweht
.Speed_Ist_Soll_Ok:
		move	Sprite_Speed_Ist(a1),d3
		add	d3,Sprite_Float(a1)
		move.b	Sprite_Float(a1),d3
		ext	d3
		clr.b	Sprite_Float(a1)

		;Horizontale Timet-Bewegung beachten
		move	Scr_X_Real_Speed(a6),d5
		neg	d5
		asr	#1,d5
		sub	d5,d3
		sub	d3,Sprite_X_Position(a1)

		;Vertikale Timet-Bewegung beachten
		move	Scr_Y_Real_Speed(a6),d5
		asr	#1,d5
		sub	d5,Sprite_Y_Position(a1)

		;Neuer Speed wenn Timer abgelaufen
.Vertikal_Ok:
		subq	#1,Sprite_Timer(a1)
		bpl.s	.Kein_neuer_Speed
		move	Sprite_Reset(a1),Sprite_Timer(a1)
.Hole_neuen_Speed:
		lea	Cloud_Speeds(pc),a3
		move.w	Sprite_Offset(a1),d3
		move.w	(a3,d3.w),d4
		bpl.s	.Speed_Ok
		clr.w	Sprite_Offset(a1)
		bra.s	.Hole_neuen_Speed
.Speed_Ok:
		addq	#WORD,Sprite_Offset(a1)
		move	d4,Sprite_Speed_Soll(a1)

		;Horizontale Positionen clippen
.Kein_neuer_Speed:
		cmp	#7*16,Sprite_X_Position(a1)
		bhs	.Links_Ok
		add	#24*16,Sprite_X_Position(a1)
.Links_Ok:
		cmp	#(8+24)*16,Sprite_X_Position(a1)
		blo	.Rechts_Ok
		sub	#24*16,Sprite_X_Position(a1)
.Rechts_Ok:
		;sub	d5,Sprite_Y_Position(a1)

		;Schleife ber alle Clouds
		add	#SPRITE_ENTRY_LENGTH,a1
		dbf	d6,.Loop

	;Alle Bewegt, Clippen und darstellen.

		;Oben oder unten abtesten ???
		tst	d5
		bmi	.Test_lower_Clip

		;Erstes Element der Sprite-Liste auerhalb ???
		move.l	Cloud_Pointer(a0),a1
		cmp	#CLOUD_UPPER_CLIP,Sprite_Y_Position(a1)
		bhs	.Clip_Ok

		;Sprite-Listen sortieren (UPPER_CLIP)
.Upper_Clip:
		add	#CLOUD_LOWER_CLIP-CLOUD_UPPER_CLIP,Sprite_Y_Position(a1)
		add.l	#SPRITE_ENTRY_LENGTH,Cloud_Pointer(a0)
		move.l	Cloud_Pointer(a0),a3
		tst	(a3)
		bpl.s	.Clip_Ok
		move.l	Cloud_Reset(a0),Cloud_Pointer(a0)
		bra	.Clip_Ok

		;Letztes Element der Sprite-Liste auerhalb ???
.Test_lower_Clip:
		move.l	Cloud_Pointer(a0),a1
		cmp.l	Cloud_Reset(a0),a1
		bne	.Nicht_erstes
		move.l	Cloud_Reset(a0),a1
		add	#SPRITE_ENTRY_LENGTH*CLOUD_PER_SPRITE,a1
.Nicht_erstes:
		sub	#SPRITE_ENTRY_LENGTH,a1
		cmp	#CLOUD_LOWER_CLIP,Sprite_Y_Position(a1)
		blo	.Clip_Ok

		;Sprite-Listen sortieren (LOWER_CLIP)
.Lower_Clip:
		sub	#CLOUD_LOWER_CLIP-CLOUD_UPPER_CLIP,Sprite_Y_Position(a1)
		move.l	Cloud_Reset(a0),a3
		cmp.l	Cloud_Pointer(a0),a3
		bne.s	.Geht_noch
		add.l	#SPRITE_ENTRY_LENGTH*CLOUD_PER_SPRITE,Cloud_Pointer(a0)
.Geht_noch	sub.l	#SPRITE_ENTRY_LENGTH,Cloud_Pointer(a0)

		;Zeiger auf Spriteliste in Copperliste schreiben
.Clip_Ok:

		;Hole Parameter fr nchste Cloud
		moveq	#CLOUD_PER_SPRITE-1,d6
		move.l	Cloud_Pointer(a0),a1

		;Hole Position und Hhe der nchsten Cloud
.Loop_2:
		move.w	Sprite_X_Position(a1),d0
		bpl.s	.Ok2
		move.l	Cloud_Reset(a0),a1
		bra.s	.Loop_2
.Ok2:
		move.w	Sprite_Y_Position(a1),d1
		movem.l	d6/a0-a1,-(sp)
		add.w	#50,d1
		sub.w	#48,d0
		moveq	#0,d2
		move.w	#Sky_PWolkeVRam/32,d3
		lea	Sky_ParaWolk_Obj_0(pc),a0

		bsr	Add_Simple_Sigel

		movem.l	(sp)+,d6/a0-a1

		;Schleife ber alle Clouds
		add	#SPRITE_ENTRY_LENGTH,a1
		dbf	d6,.Loop_2

		;und zurck
.Done		
		rts


*----------------------------------------------------------------------------
*	Definitionen, Strukturen und Tabellen fr die Wolken
*
*	keine Parameter
*----------------------------------------------------------------------------
			rsreset
Cloud_Pointer		rs.l	1
Cloud_Reset		rs.l	1
Cloud_Sprite		rs.l	1
CLOUD_ENTRY_LENGTH	rs.w	0
*----------------------------------------------------------------------------
*----------------------------------------------------------------------------
Cloud_Default_1	dc.w	280,050,064,064,0,05*WORD,50,100
		dc.w	152,085,128,128,0,10*WORD,25,75
		dc.w	408,120,256,256,0,02*WORD,80,150
		dc.w	370,155,064,064,0,09*WORD,30,50
		dc.w	220,190,256,256,0,01*WORD,50,80
		dc.w	300,225,128,128,0,14*WORD,10,125
		dc.w	-1

*----------------------------------------------------------------------------
Cloud_Speeds	dc.w	259,277,235,060,491,072,063,398,313,432
		dc.w	458,407,308,441,480,333,496,450,261,014,137,-1
*----------------------------------------------------------------------------

Sky_ParaWolk_Obj_0:
	dc.w $0040

	dc.w $0F00
	dc.w CBASE+$0000
	dc.b 0
	dc.b 0

	dc.w $0F00
	dc.w CBASE+$0010
	dc.b 32
	dc.b 0

	dc.w -1

Sky_PBase	= $6000+Sky_ParaVRam/32

;-------------- Initialisiert Parallax-Playfield
Init_SkyParallax:
	lea	Sky_Para_bin_p,a0
	move	#4096,d0
	lea	Sky_ParaVRam,a1
	bsr	LoadVRam_crunched

	lea	PARAWOLK_raw,a0
	move	#1024,d0
	lea	Sky_PWolkeVRam,a1
	bsr	LoadVRam_crunched

	move	#$8f02,$c00004

	lea	parablock1(pc),a0
	move	#$c000,d0
	moveq	#15,d5
.loop5:
	bsr	SetVRamAdress

	moveq	#4,d6
.loop4:
	move.l	a0,a1
	moveq	#9,d7
.loop3:
	move	(a1)+,d1
	add.w	#Sky_PBase,d1
	move.w	d1,$c00000
	dbf	d7,.loop3
	dbf	d6,.loop4

	lea	20(a0),a0
	add	#$80,d0
	dbf	d5,.loop5

	;Create CopperLists

	lea	Sky_CopperList1(a6),a0
	lea	Sky_CopperList2(a6),a1
	move.l	#Copper_InitSky,(a0)+
	move.w	#$ff,(a0)+
	move.l	#Copper_InitSky,(a1)+
	move.w	#$ff,(a1)+
	moveq	#15-1,d7
.loop:
	move.l	#Copper_SkySplit,(a0)+
	move.w	#$ff,(a0)+
	move.l	#Copper_SkySplit,(a1)+
	move.w	#$ff,(a1)+
	dbf	d7,.loop
	move.l	#Int_Nop,(a0)+
	move.l	#Int_Nop,(a1)+

	lea	YPos_Table1(a6),a0
	lea	YPos_Table2(a6),a1
	move.l	a0,YPos_Pointer(a6)
	move.l	a1,YPos_Buffer(a6)

	moveq	#16-1,d7
.init_ypostable:
	clr.l	(a0)+
	clr.w	(a0)+
	clr.l	(a1)+
	clr.w	(a1)+
	dbf	d7,.init_ypostable

	lea	Cloud_Zeiger_Liste(a6),a0
	lea	Cloud_Liste_1(a6),a1

	move.l	a1,Cloud_Pointer(a0)
	move.l	a1,Cloud_Reset(a0)
	move.l	#Sky_ParaWolk_Obj_0,Cloud_Sprite(a0)

	lea	Cloud_Default_1(pc),a0
	moveq	#SPRITE_ENTRY_LENGTH*CLOUD_PER_SPRITE+2-1,d7
.copy_default:
	move.b	(a0)+,(a1)+
	dbf	d7,.copy_default

	lea	Sky_Fade_Struktur(a6),a0
	lea	Black_Coltab,a1
	lea	SkyParaCols(pc),a2

	move.w	#84-1,d0
	bsr	Init_Transformation
	move.l	#Init_SkyParaFadeOut,Init_ParaFadeOut(a6)

	move.w	#$8b00,$c00004
	sf	Scr_SplitScroll(a6)

	move.l	#Sky_CopperList1+WorkRam,Copper_List(a6)
	move.l	#Sky_CopperList2+WorkRam,Copper_Buffer(a6)

	rts

Init_SkyParaFadeOut:
	lea	Sky_Fade_Struktur(a6),a0
	lea	SkyParaCols(pc),a1
	lea	Black_Coltab,a2

	move.w	#84-1,d0
	jmp	Init_Transformation

parablock1:
	dc.w	0,1,4,5,8,0,1,4,5,8
	dc.w	2,3,6,7,10,2,3,6,7,10
	dc.w	9,11,62,63,64,9,11,52,53,54

parablock2:
	dc.w	12,13,16,17,20,21,24,25,28,29
	dc.w	14,15,18,19,22,23,26,27,30,31
	dc.w	32,33,36,37,40,41,44,45,48,49
	dc.w	34,35,38,39,42,43,46,47,50,51
	dc.w	55,56,57,60,61,58,59,62,63,64

	dc.w	61,61,61,61,61,61,61,61,61,61
	dc.w	61,61,61,61,61,61,61,61,61,61
	dc.w	61,61,61,61,61,61,61,61,61,61

	dc.w	$1000+55,$1000+56,$1000+57,$1000+60,$1000+61,$1000+58,$1000+59,$1000+62,$1000+63,$1000+64
	dc.w	$1000+34,$1000+35,$1000+38,$1000+39,$1000+42,$1000+43,$1000+46,$1000+47,$1000+50,$1000+51
	dc.w	$1000+32,$1000+33,$1000+36,$1000+37,$1000+40,$1000+41,$1000+44,$1000+45,$1000+48,$1000+49
	dc.w	$1000+14,$1000+15,$1000+18,$1000+19,$1000+22,$1000+23,$1000+26,$1000+27,$1000+30,$1000+31
	dc.w	$1000+12,$1000+13,$1000+16,$1000+17,$1000+20,$1000+21,$1000+24,$1000+25,$1000+28,$1000+29

	ENDC
*NEONNEONNEONNEONNEONNEON*
